package br.com.controleVendas.controller;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.primefaces.context.RequestContext;

import br.com.controleVendas.config.HibernateUtil;
import br.com.controleVendas.dao.VendaDao;
import br.com.controleVendas.dao.VendaProdutoDao;
import br.com.controleVendas.entity.Venda;
import br.com.controleVendas.entity.VendaDto;
import br.com.controleVendas.entity.VendaProdutoDto;

@ManagedBean(name = "vendaCtrl")
@ViewScoped
public class VendaController {

	List<VendaDto> list = new ArrayList<>();

	private VendaDto venda;

	VendaDao dao = null;

	private VendaProdutoDao vendaProdutoDao;

	HttpSession httpSession;

	public VendaController() throws Exception {
		dao = HibernateUtil.getInstance().getVendaDao();
		vendaProdutoDao = HibernateUtil.getInstance().getVendaProdutoDao();

		atualizaListagem();
		httpSession = (HttpSession) FacesContext.getCurrentInstance()
				.getExternalContext().getSession(true);
	}

	public void atualizaListagem() throws Exception {
		VendaDto venda = new VendaDto();
		venda.setListCriterion(new ArrayList<Criterion>());
		venda.getListCriterion().add(Restrictions.isNull("dtFechamento"));

		list = dao.getList(new VendaDto());
		RequestContext.getCurrentInstance().update(":formVendaListar");
	}

	public void setVisualizar(VendaDto vendaDto) throws Exception {
		this.venda = new VendaDto();
		this.venda.setCdId(vendaDto.getCdId());
		this.venda = dao.getOne(this.venda);
		montarListVendaProduto(this.venda);

	}

	public void montarListVendaProduto(VendaDto venda) {
		try {
			VendaProdutoDto vendaProduto = new VendaProdutoDto();
			vendaProduto.setVenda(new Venda());
			vendaProduto.setListCriterion(new ArrayList<Criterion>());
			vendaProduto.getListCriterion().add(
					Restrictions.eq("venda.cdId", venda.getCdId()));
			venda.setListVendaProduto(vendaProdutoDao.getList(vendaProduto));
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void setEditar(VendaDto vendaDto) throws Exception {
		this.venda = new VendaDto();
		this.venda.setCdId(vendaDto.getCdId());
		this.venda = dao.getOne(this.venda);
		if (venda.getVlEntrada() == null)
			venda.setVlEntrada(0D);

		if (venda.getQtdParcela() == null)
			venda.setQtdParcela(1);

		httpSession.setAttribute("venda", this.venda);
	}

	public List<VendaDto> getList() {
		return list;
	}

	public VendaDto getVenda() {
		return venda;
	}

	public void setVenda(VendaDto venda) {
		this.venda = venda;
	}

}
